/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package interfaz;

import clasesJXTA.AdministradorJXTA;
import clasesJXTA.NodoRemoto;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Asistente
 */
public class PanelBuscarFotos extends JPanel implements ActionListener, Observer
{
    private final static String[] ENCABEZADOS = { "Usuario", "ID Foto", "Dirección IP" };
    
    private final static String BUSCAR_FOTOS = "  Buscar Fotos ";
    
    private final static String DESCARGAR = "Descargar";
    
    private InterfazFotosP2P principal;
    
    private JButton butBuscarFotos;
    
    private JButton butDescargar;
    
    private JTable tabla;

    private DefaultTableModel modelo;
    
    private JScrollPane scroll;
    /** 
     * arraylist con los nodos remotos que llegan luego de una busqueda
     */
    ArrayList<NodoRemoto> listaNodosRemotos;
    
    public PanelBuscarFotos( InterfazFotosP2P ventana )
    {
        principal= ventana;
        
        setLayout( new BorderLayout( ) );
        
        JPanel aux = new JPanel( );
        aux.setLayout( new BorderLayout( ) );
        
        butBuscarFotos = new JButton( BUSCAR_FOTOS );
        butBuscarFotos.setActionCommand( BUSCAR_FOTOS );
        butBuscarFotos.addActionListener( this );
        aux.add( butBuscarFotos, BorderLayout.NORTH );
        
        aux.add( new JPanel( ), BorderLayout.CENTER );
        
        add( aux, BorderLayout.WEST );
        
        JPanel aux2 = new JPanel( );
        aux2.setLayout( new BorderLayout( ) );
        
        modelo = new DefaultTableModel( ENCABEZADOS, 0 );
        tabla = new JTable( );
        tabla.setModel( modelo );

        scroll = new JScrollPane( tabla );
        scroll.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
        scroll.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED );
        scroll.setBorder( new TitledBorder( "Fotos Encontradas" ) );
        aux2.add( scroll, BorderLayout.CENTER );
        
        butDescargar = new JButton( DESCARGAR );
        butDescargar.setActionCommand( DESCARGAR );
        butDescargar.addActionListener( this );
        aux2.add( butDescargar, BorderLayout.SOUTH );
        
        add( aux2, BorderLayout.CENTER );
        
        listaNodosRemotos = new ArrayList<NodoRemoto>();
    }
    
    public void update( Observable o, Object ob )
    {
        if( o instanceof AdministradorJXTA )
        {
            listaNodosRemotos = ( ArrayList<NodoRemoto> )ob;
            modelo = new DefaultTableModel( ENCABEZADOS, 0 );
            String[ ] fila;
            for( NodoRemoto n: listaNodosRemotos )
            {
                fila = new String[ 3 ];
                System.out.println( "Usuario:" + n.getNombreNodo( ) );
                fila[ 0 ] = n.getNombreNodo( );
                System.out.println( "Foto:" + n.getIDFoto( ) );
                fila[ 1 ] = n.getIDFoto( );
                System.out.println( "IP:" + n.getDireccionIP( ) );
                fila[ 2 ] = n.getDireccionIP( );
                modelo.addRow( fila );
            }
            tabla.setModel( modelo );
        }
    }
    
    public void actionPerformed( ActionEvent e )
    {
        String comando = e.getActionCommand( );
        
        if( comando.equals( BUSCAR_FOTOS ) )
        {
            principal.buscarFotos( );
        }
        else if( comando.equals( DESCARGAR ) )
        {
           int[] filasSeleccionadas = tabla.getSelectedRows();
           
            for (int i = 0; i < filasSeleccionadas.length; i++) {
                int j = filasSeleccionadas[i];
                //Coje la información necesaria para la descarga
                String nombreUsuarioRemoto = modelo.getValueAt(j, 0).toString();
                String nombreArchivo = modelo.getValueAt(j, 1).toString();
                String ipUsuarioRemoto = modelo.getValueAt(j, 2).toString();
                
                NodoRemoto nodoRemoto = buscarNodoEnLista (nombreUsuarioRemoto, ipUsuarioRemoto);
                
                System.out.println("Toca descargar la foto \n" + nodoRemoto.getIDFoto() + "\n del nodo" + nodoRemoto.getNombreNodo() 
                        +"\n con la ip" + nodoRemoto.getDireccionIP());
                principal.descargarFoto( nombreArchivo, nodoRemoto);
            }
        }
    }
    /**
     * 
     * @param nombreUsuario
     * @param ipUsuario
     * @return 
     */
    private NodoRemoto buscarNodoEnLista(String nombreUsuario, String ipUsuario) {
        for (int i = 0; i < listaNodosRemotos.size(); i++) {
            NodoRemoto nodoRemoto = listaNodosRemotos.get(i);
            System.out.println("ipdel nodo: " +nodoRemoto.getDireccionIP());
            System.out.println("ipdel buscada: " +ipUsuario);
            System.out.println("ipdel nodo: " +nodoRemoto.getNombreNodo());
            System.out.println("ipdel buscada: " +nombreUsuario);
            
            if (nodoRemoto.getDireccionIP().equals(ipUsuario) && nodoRemoto.getNombreNodo().equals(nombreUsuario)){
                return nodoRemoto;
            }
        }
        // esto nunca deberia pasar
        return null;
    }

    void deshabilitar() 
    {
        butBuscarFotos.setEnabled(false);
        butDescargar.setEnabled(false);
    }

    void habilitar() 
    {
        butBuscarFotos.setEnabled(true);
        butDescargar.setEnabled(true);
    }
}
